#include <string.h>
#include "item.h"

Item::Item(int id)
{
    const BaseTypeItem* pBaseTypeItem = g_baseItemMgr.getBaseItemByID(id);

    if (NULL != pBaseTypeItem)
    {
        m_id = id;
        m_type = pBaseTypeItem->m_type;

        pBaseTypeItem->makeItem(*this);
    }
}

void Item::doItemAction(int aActionID)
{
    const BaseTypeItem* pBaseItem = g_baseItemMgr.getBaseItemByType(m_type);

    if (NULL != pBaseItem)
    {
        pBaseItem->doActionItem(aActionID, *this);
    }
}

int Item::getID()
{
    return m_id;
}

BaseItemMgr::BaseItemMgr()
{
    memset(m_typeArray, 0, sizeof(m_typeArray));
    memset(m_idArray, 0, sizeof(m_idArray));
}
const BaseTypeItem* BaseItemMgr::getBaseItemByType(int aType) const
{
    return (aType >= 0 && aType < MAX_ITEM_TYPE) ? m_typeArray[aType] : NULL;
}

const BaseTypeItem* BaseItemMgr::getBaseItemByID(int aID) const
{
    return (aID >= 0 && aID < MAX_ITEM_ID_NUM) ? m_idArray[aID] : NULL;
}

void BaseItemMgr::registerTypeItem(const BaseTypeItem* pBaseItem)
{
    if (NULL != pBaseItem && pBaseItem->m_type >= 0 && pBaseItem->m_type < MAX_ITEM_TYPE)
    {
        m_typeArray[pBaseItem->m_type] = pBaseItem;
    }
}

void BaseItemMgr::registerIdItem(const BaseTypeItem* pBaseItem, int aID)
{
    if (aID >= 0 && aID < MAX_ITEM_ID_NUM)
    {
        m_idArray[aID] = pBaseItem;
    }
}

BaseItemMgr g_baseItemMgr;
